import i18n from '@/i18n';
import axios from 'axios';
import type { AxiosRequestConfig } from 'axios';
import { showToast } from 'vant';

// 定义API返回的数据结构
interface ApiResponse<T = any> {
  status: number;
  message: string;
  data: T;
}

// 使用相对路径配合Vite代理
// const API_BASE_URL = '/api'; // 使用相对路径,请求会被Vite代理转发
const API_BASE_URL = 'https://sunny.power.api.bz'; // 使用相对路径,请求会被Vite代理转发

// 创建axios实例
const request = axios.create({
  baseURL: API_BASE_URL,
  timeout: 30000, // 请求超时时间
  headers: {
    'locale': i18n.global.locale.value == 'en' ? 'en' : 'zh_CN',
    'Content-Type': 'application/json',
    // 'Authorization':'Bearer d9f565147f0f0c3ce4f3816df4a331c299a8a735b13511bd3ccb67bf44b3e1c1'
  },
  withCredentials: false // 跨域请求不携带凭证
});

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 可以在这里添加请求前的处理，如显示加载状态、添加token等
    console.log('发送请求:', config.url, config.data, '请求方法:', config.method);

    // 移除客户端CORS头,因为使用代理后不需要
    // config.headers['Access-Control-Allow-Origin'] = '*';
    // config.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS';
    // config.headers['Access-Control-Allow-Headers'] = 'Origin, Content-Type, Accept';

    return config;
  },
  error => {
    console.error('请求发送失败：', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  response => {
    console.log('接收响应:', response.data);
    const data = response.data;
    // 业务错误拦截
    if ((typeof data.status !== 'undefined' && data.status !== 200) || data.success === false) {
      showToast({
        message: data.message,
        position: 'middle',
        type: 'fail'
      });
      return Promise.reject(data)
    }
    return data;
  },
  error => {
    console.error('响应错误：', error);

    // 处理不同的错误情况
    let message = '网络请求失败，请稍后再试';

    if (error.response) {
      // 服务器返回了响应，但状态码不在2xx范围内
      console.error('错误状态码:', error.response.status);
      console.error('错误数据:', error.response.data);

      if (error.response.status === 404) {
        message = '请求的资源不存在，请检查URL';
      } else if (error.response.status === 403) {
        message = '没有权限访问该资源';
      } else if (error.response.status === 500) {
        message = '服务器内部错误';
      } else if (error.response.status === 401) {
        message = '未授权，请重新登录';
      }

    } else if (error.request) {
      // 请求已发送，但没有收到响应
      message = '服务器无响应，请检查网络连接';
    } else if (error.message && error.message.includes('Network Error')) {
      message = '网络错误，可能是CORS跨域问题，请联系管理员';
    } else if (error.message && error.message.includes('timeout')) {
      message = '请求超时，请稍后再试';
    }

    console.error('最终错误消息:', message);

    showToast({
      message: message,
      position: 'middle',
      type: 'fail'
    });

    return Promise.reject(error);
  }
);

// API 请求函数
export const api = {
  // 获取预约信息
  async getAppointmentInfo(trackingNumber: string) {
    try {
      console.log(`正在获取跟踪号为 ${trackingNumber} 的预约信息...`);
      const response = await request.post('/external/appointment/info', {
        tracking_number: trackingNumber
      });
      return response;
    } catch (error) {
      console.error('获取预约信息失败:', error);
      return {
        code: -1,
        msg: '网络请求失败',
        data: null
      };
    }
  },

  // 提交预约
  async submitAppointment(data: any) {
    try {
      const response = await request.post('/external/appointment/save', data);
      return response;
    } catch (error) {
      console.error('提交预约失败:', error);
      return {
        code: -1,
        msg: '网络请求失败',
        data: null
      };
    }
  }
};

export default request;